package com.scs.application.modules.base.mapper;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.scs.application.core.mapper.IBaseMapper;
import com.scs.application.modules.base.dto.MatrApplyDemandDTO;
import com.scs.application.modules.base.dto.MatrToMscmDTO;
import com.scs.application.modules.base.entity.Matr;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 耗材信息 Mapper 接口
 * </p>
 */
public interface MatrMapper extends IBaseMapper<Matr> {

    /**
     * 查询耗材信息（含耗材库存总量）
     * @return
     */
    List<Map> listWithStock(@Param(Constants.WRAPPER) QueryWrapper<Matr> wrapper, @Param("params") Map<String,Object> params,@Param("limitCount") Integer limitCount);

    List<Map> listWithDemand(QueryWrapper wrapper, Map<String, Object> params, int limitCount);

    /**
     * 通用分页查询
     * @param page
     * @param wrapper
     * @param params 真实参数
     * @return
     */
    Page<?> pageForReportMatr(IPage page, @Param(Constants.WRAPPER) QueryWrapper<Matr> wrapper, @Param("params") Map<String,Object> params, @Param("userParam") Map<String,Object> userParam);

    /**
     * 通用分页查询
     * @param page
     * @param wrapper
     * @param params 真实参数
     * @return
     */
    Page<?> pageWithStock(IPage page, @Param(Constants.WRAPPER) QueryWrapper<Matr> wrapper, @Param("params") Map<String,Object> params, @Param("userParam") Map<String,Object> userParam);

    /**
     *推送耗材查询
     */

    List<MatrToMscmDTO> getMatrToMscm(@Param("date") Date date);


    /**
     *推送当前耗材查询
     */

    List<MatrToMscmDTO> getOnceMatrToMscm(List<String> list);

    IPage<?> pageUsing(IPage page, @Param(Constants.WRAPPER) QueryWrapper<Matr> wrapper, @Param("params") Map<String, Object> params);

    /**
     * 通用分页查询
     * @param page
     * @param wrapper
     * @param params 真实参数
     * @return
     */
    Page<MatrApplyDemandDTO> pageWithStockForApplyDemand(IPage page, @Param(Constants.WRAPPER) QueryWrapper<Matr> wrapper, @Param("params") Map<String,Object> params, @Param("userParam") Map<String,Object> userParam);


    /**
     * 通用分页查询
     * @param page
     * @param wrapper
     * @param params 真实参数
     * @return
     */
    Page<?> pageInStock(IPage page, @Param(Constants.WRAPPER) QueryWrapper<Matr> wrapper, @Param("params") Map<String,Object> params, @Param("userParam") Map<String,Object> userParam);

    /**
     * 查询临时采购且未被停用的耗材
     */
    List<Matr> selectIsTermPurchase();


    /**
     * 查询临时采购且未被停用的耗材
     */
    List<Map> getMatrWarehouseList();


    /**
     * 根据库存更新耗材禁用状态
     */
    void updateDisabledByStock();


    /**
     * 将没有供应商或者默认供应商的商品更新为禁用
     */
    void updateDisabledBySp();
}
